<?php
/**
 * Created by PhpStorm.
 * User: s.utkin
 * Date: 22.08.14
 * Time: 12:36
 */

namespace Messenger\Messages;

use Messenger\Groups;
use Messenger\Messages;
use Messenger\BaseAction;
use Messenger\Queue;

class ListbodyAction extends BaseAction
{
	protected static $isPublic = true;
	
	/**
	 * Указываем необходимые неявные параметры
	 * @return multitype:string
	 */
	static function pullParams() {
		return ['identity'];
	}
	
    /**
     * Выводит переписку (список сообщений)
     */
    protected function run()
    {
        $groupId = (string)$this->request->groupId;
        $companionProfileId = (string)$this->request->companionProfileId;
        $beforeTimestamp = $this->request->beforeTimestamp > 0 ? (int)$this->request->beforeTimestamp : null;
        $myProfileId = $this->request->_identity;

		if (!$myProfileId) {
			throw new \Exception('Необходима авторизация', 403);
		}

        # Получаем количество непросмотренных сообщений и обнуляем счетчик непросмотренных сообщений в моделе группы
        /** @var Groups $group */
        $group = Groups::find($groupId);
        $unseenMessagesCount = (int)$group->unseenMessages[$myProfileId]->count;

        # Если непросмотренных сообщений больше количества выводимых по дефолту - выводит все непросмотренные
        $messagesLimit = $unseenMessagesCount > 16 ? $unseenMessagesCount : 16;

        # Получаем список сообщений
        $messageModel = new Messages();
        $messages = $messageModel->getGroupMessages($groupId, $messagesLimit, $beforeTimestamp);

        # Определяем, нужно ли выводить кнопку пагинации
        $showPaginationButton = false;
        $beforeTimestamp = 0;
        if (count($messages) > 0) {
            $firstMessage = $messages[0];
            $historyMessage = $messageModel->getGroupMessages($groupId, 1, $firstMessage->sendTimestamp);

            if (count($historyMessage) > 0) {
                $beforeTimestamp = $firstMessage->sendTimestamp;
                $showPaginationButton = true;
            }
        }

		Queue::enqueue(
			[
				'type' => \MessengerNotificationDeliveryConfig::TYPE_MESSAGE_READ,
				'data' => [
					'groupId' => (string)$groupId,
					'authorId' => (string)$companionProfileId,
					'readerId' => (string)$myProfileId,
					'readTimestamp' => time(),
				],
			]
		);

        $this->response->myProfileId = $this->request->myProfileId; // ??? почему отсюда?
        $this->response->messages = $messages;
        $this->response->showPaginationButton = $showPaginationButton;
        $this->response->groupId = $groupId;
        $this->response->companionProfileId = $companionProfileId;
        $this->response->beforeTimestamp = $beforeTimestamp;
    }
}